package com.crt.nexus.core.exception;

import com.crt.nexus.core.constant.CommonConstants;

@SuppressWarnings("unused")
public class ServiceException extends RuntimeException {

	/**
	 * 全局系统异常，报告给用户的消息.
	 */
	public static final String GLOBAL = "网络正忙(GL)";
	/**
	 * 乐观锁，报告给用户的消息.
	 */
	public static final String OPTIMISTIC_LOCKING = "网络正忙(OL)";
	/**
	 * 状态机异常，报告给用户的消息.
	 */
	public static final String STATE_MACHINE = "网络正忙(SM)";
	/**
	 * 数据约束异常，报告给用户的消息.
	 */
	public static final String DUPLICATE_KEY = "网络正忙(DK)";
	/**
	 * 认证失败，报告给用户的消息.
	 */
	public static final String AUTH_FAILD = "网络正忙(AF)";
	/**
	 * 出现NullPointerException时，报告给用户的消息. 如：
	 * <pre>
	 * catch (NullPointerException e) {
	 *     throw new ServiceException(ServiceException.NULL);
	 * }
	 * </pre>
	 */
	public static final String NULL = "网络正忙(NP)";
	/**
	 * 出现RuntimeException时，报告给用户的消息. 如：
	 * <pre>
	 * catch (RuntimeException e) {
	 *     throw new ServiceException(ServiceException.RUNTIME, e);
	 * }
	 * </pre>
	 */
	public static final String RUNTIME = "网络正忙(RT)";
	/**
	 * URL不存在时，报告给用户的消息.
	 */
	public static final String URL_NOT_FOUND = "地址不存在(NF)";
	/**
	 * 出现敏感词汇时，报告给用户的消息.
	 */
	public static final String SENSITIVE_WORDS = "网络正忙(SW)";
	/**
	 * 网络连接不通时，报告给用户的消息.
	 */
	public static final String NETWORK = "网络正忙(NW)";
	/**
	 * 验证错误时，报告给用户的消息.
	 */
	public static final String VALIDATION = "验证失败(VE)";
	/**
	 * 用户名密码授权失败时，报告给用户的消息.
	 */
	public static final String INVALID_NAME_PASSWORD = "用户名或密码不正确(INP)";
	/**
	 * 授权失败时，报告给用户的消息.
	 */
	public static final String AUTHENTICATION = "授权失败(AF)";
	/**
	 * 权限不足错误时，报告给用户的消息.
	 */
	public static final String UNAUTHORIZED = "授权失败(UA)";
	/**
	 * 访问受限时，报告给用户的消息.
	 */
	public static final String ACCESS_DENIED = "权限不足(AD)";
	/**
	 * Client授权失败时，报告给用户的消息.
	 */
	public static final String CLIENT_AUTH = "客户端的用户名或密码不正确(CA)";
	/**
	 * 无basic auth授权时，报告给用户的消息.
	 */
	public static final String BASIC_AUTH = "需要完整的身份验证才能访问此资源(BA)";
	/**
	 * 转换Token成JSON授权时报错，报告给用户的消息.
	 */
	public static final String INVALID_JSON_TOKEN = "令牌不能被转换(IJT)";
	/**
	 * 授权类型参数错误，报告给用户的消息.
	 */
	public static final String AUTH_REQUIRED_TYPE = "授权类型参数错误(ART)";
	/**
	 * 不支持的授权类型，报告给用户的消息.
	 */
	public static final String AUTH_GRANT_TYPE = "不支持的授权类型(AGT)";
	/**
	 * 不支持的SCOPE，报告给用户的消息.
	 */
	public static final String INVALID_SCOPE = "不支持的SCOPE(IS)";

	//Properties
	private int code = CommonConstants.FAIL;

	/**
	 * 获得本Exception异常消息的code参数
	 * <p/>
	 *
	 * @return code
	 */
	public int getCode() {
		return code;
	}

	public ServiceException() {
		super();
	}

	public ServiceException(String message) {
		super(message);
	}

	/**
	 * 用HTTP状态, 消息<code>code</code>及其参数<code>message</code>构造一个Exception.
	 * <p/>
	 *
	 * @param code   错误代码
	 * @param message 错误消息
	 */
	public ServiceException(int code, String message) {
		super(message);
		this.code = code;
	}

}
